//package com.yowasa.xiuxian.controller;
//
//import cn.hutool.json.JSONObject;
//import cn.hutool.json.JSONUtil;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.yowasa.xiuxian.engine.CommonEngine;
//import com.yowasa.xiuxian.engine.item.ItemInterface;
//import com.yowasa.xiuxian.entity.bo.item.ItemAttr;
//import com.yowasa.xiuxian.entity.bo.user.UserBO;
//import com.yowasa.xiuxian.entity.po.*;
//import com.yowasa.xiuxian.mapper.*;
//import com.yowasa.xiuxian.service.helper.EmailHelper;
//import com.yowasa.xiuxian.service.helper.ExtendHelper;
//import com.yowasa.xiuxian.service.helper.ItemHelper;
//import com.yowasa.xiuxian.service.helper.UserHelper;
//import com.yowasa.xiuxian.util.RandomUtil;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.scheduling.annotation.EnableScheduling;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.List;
//import java.util.Map;
//
//import static com.yowasa.xiuxian.util.ContentUtil.getIndex;
//
//@EnableScheduling
//@RestController
//@RequestMapping("/task")
//public class TransactionTaskController {
//
//    @Autowired
//    private UserHelper userHelper;
//    @Autowired
//    private ItemHelper itemHelper;
//    @Autowired
//    private XiuxianTransactMapper xiuxianTransactMapper;
//    @Autowired
//    private XiuxianShopItemMapper xiuxianShopItemMapper;
//    @Autowired
//    private ExtendHelper extendHelper;
//    @Autowired
//    private EmailHelper emailHelper;
//    @Autowired
//    private XiuxianBattleFieldMapper xiuxianBattleFieldMapper;
//    @Autowired
//    private XiuxianExtendMapper xiuxianExtendMapper;
//    @Autowired
//    private XiuxianRedPacketMapper xiuxianRedPacketMapper;
//    @Autowired
//    private XiuxianExploreUserMapper exploreUserMapper;
//    public static final Logger logger = LoggerFactory.getLogger(TransactionTaskController.class);
//
//    //拍卖行结算
//    @Scheduled(cron = "0 0 1 * * ?")
//    private void transactionSettlement(){
//        logger.info("---------------------------------------------------------");
//        logger.info("----------------------拍卖行结算开始----------------------");
//        XiuxianTransactPO transactPO = new XiuxianTransactPO();
//        transactPO.setStatus(0);
//        List<XiuxianTransactPO> transactPOList = xiuxianTransactMapper.selectList(new LambdaQueryWrapper<XiuxianTransactPO>()
//                .eq(XiuxianTransactPO::getStatus, 2));
//
//        transactPOList.forEach(e ->{
//            Long accountId = e.getAccountId();
//            //售卖人拿钱
//            XiuxianUserEmail email = new XiuxianUserEmail(accountId);
//            JSONObject jsonObject = new JSONObject();
//            jsonObject.put("type",0);
//            jsonObject.put("name","摩拉");
//            jsonObject.put("num", e.getItemPrice());
//            jsonObject.put("quality",2);
//            email.setExtra(jsonObject.toString());
//            email.setTitle("求购时间到期");
//            email.setMsg("你在拍卖行的上架的求购[" + e.getItemName() + "]超时下架，你获得摩拉" + e.getItemPrice());
//            emailHelper.insert(email);
//
//        });
//        xiuxianTransactMapper.update(transactPO,new LambdaQueryWrapper<XiuxianTransactPO>()
//                .eq(XiuxianTransactPO::getStatus, 2));
//        logger.info("----------------------所有求购清空----------------------");
//        List<XiuxianTransactPO> xiuxianTransactPOS = xiuxianTransactMapper.selectList(new LambdaQueryWrapper<XiuxianTransactPO>()
//                .eq(XiuxianTransactPO::getStatus,1));
////        logger.info("共有以下记录参与结算：{}",);
//        for (XiuxianTransactPO po : xiuxianTransactPOS){
//            //如果是系统上架的，钱全打给我自己
//            Long accountId = po.getAccountId();
//            if(accountId == 0L){
//                accountId = 2L;
//            }
//            //物品
//            ItemInterface itemInterface = CommonEngine.ITEM_MAP.get(po.getItemName());
//            if(po.getNowAccount() != 0L){
//                //有人出价
//
//                //售卖人拿钱
//                XiuxianUserEmail email = new XiuxianUserEmail(accountId);
//                JSONObject jsonObject = new JSONObject();
//                jsonObject.put("type",0);
//                jsonObject.put("name","摩拉");
//                jsonObject.put("num", po.getNowPrice());
//                jsonObject.put("quality",2);
//                email.setExtra(jsonObject.toString());
//                email.setTitle("拍卖行物品售出");
//                email.setMsg("你在拍卖行的上架的[" + po.getItemName() + "]已经售出，你获得摩拉" + po.getNowPrice());
//                emailHelper.insert(email);
//
//                //购买人拿东西
//                XiuxianUserEmail emailA = new XiuxianUserEmail(po.getNowAccount());
//                JSONObject jsonObjectA = new JSONObject();
//                jsonObjectA.put("type",itemInterface.getType().getId());
//                jsonObjectA.put("name",itemInterface.getName());
//                jsonObjectA.put("num", po.getItemNum());
//                if(itemInterface.getType().getId() == 3){
//                    ItemAttr itemAttr = JSONUtil.toBean(po.getItemAttr(), ItemAttr.class);
//                    jsonObjectA.put("quality",itemAttr.getQuality());
//                }else {
//                    jsonObjectA.put("quality",2);
//                }
//                emailA.setExtra(jsonObjectA.toString());
//                emailA.setTitle("拍卖行结算");
//                emailA.setMsg("你在拍卖行出价购买的[" + po.getItemName() + "]成功结算，物品已存入附件，请及时领取");
//                emailHelper.insert(emailA);
//
//
//            }else {
//                //无人出价，流拍，直接退回原账户
//
//                XiuxianUserEmail emailA = new XiuxianUserEmail(accountId);
//                JSONObject jsonObjectA = new JSONObject();
//                jsonObjectA.put("type",itemInterface.getType().getId());
//                jsonObjectA.put("name",itemInterface.getName());
//                jsonObjectA.put("num", po.getItemNum());
//                if(itemInterface.getType().getId() == 3){
//                    ItemAttr itemAttr = JSONUtil.toBean(po.getItemAttr(), ItemAttr.class);
//                    jsonObjectA.put("quality",itemAttr.getQuality());
//                }else {
//                    jsonObjectA.put("quality",2);
//                }
//                emailA.setExtra(jsonObjectA.toString());
//                emailA.setTitle("拍卖行流拍退回");
//                emailA.setMsg("你在拍卖行寄售的[" + po.getItemName() + "]无人出价，已退回至附件，请及时领取");
//                emailHelper.insert(emailA);
//            }
//            //拍卖行下架
//            po.setStatus(0);
//            po.setUpdateTime(new Date());
//            xiuxianTransactMapper.updateById(po);
//        }
//
//        logger.info("----------------------拍卖行结算结束----------------------");
//        logger.info("---------------------------------------------------------");
//    }
//
//    //商店补货
//    @Scheduled(cron = "0 0 0 * * ?")
//    public void transactionTask(){
//        //补货
//        xiuxianShopItemMapper.updateNum();
//        //删除图纸
//        xiuxianShopItemMapper.delete(new LambdaQueryWrapper<XiuxianShopItem>().eq(XiuxianShopItem::getItemType,6));
//        //随机今天的图纸
//        List<XiuXianDrawing> allDrawing = itemHelper.getAllDrawing(4);
//
//        //蒙德的随机结果
//        XiuXianDrawing choice = RandomUtil.choice(allDrawing);
//        XiuxianShopItem item = new XiuxianShopItem();
//        item.setItemNum(200);
//        item.setItemName(choice.getEquipName()+"图纸");
//        item.setItemType(6);
//        item.setMapId(4L);
//        item.setPrice((int) Math.pow(10,choice.getType()));
//        item.setOriginNum(200);
//        itemHelper.addShopItem(item);
//
//        XiuXianDrawing choice2 = RandomUtil.choice(allDrawing);
//        XiuxianShopItem item2 = new XiuxianShopItem();
//        item2.setItemNum(200);
//        item2.setItemName(choice2.getEquipName()+"图纸");
//        item2.setItemType(6);
//        item2.setMapId(13L);
//        item2.setPrice((int) Math.pow(10,choice2.getType()));
//        item2.setOriginNum(200);
//        itemHelper.addShopItem(item2);
//    }
//
//
//    //活动排行榜结算
////    @Scheduled(cron = "0 0 23 * * ?")
////    public void activityBattleTask(){
////        for (int i = 2;i<10;i++){
////            List<Map<String,Object>> a = extendHelper.listDamage(i);
////
////            a.forEach(getIndex((e, index) -> {
////
////                ItemInterface itemInterface = CommonEngine.ITEM_MAP.get("无色晶体");
////                XiuxianUserEmail emailA = new XiuxianUserEmail((Long) e.get("id"));
////                JSONObject jsonObjectA = new JSONObject();
////                jsonObjectA.put("type",itemInterface.getType().getId());
////                jsonObjectA.put("name",itemInterface.getName());
////                jsonObjectA.put("num", 10 - index);
////                jsonObjectA.put("quality",2);
////                emailA.setExtra(jsonObjectA.toString());
////                emailA.setTitle("活动排行榜结算");
////                emailA.setMsg("你在今日的活动挑战中获得了第" + (index+1) + "名，物品已存入附件，请及时领取");
////                emailHelper.insert(emailA);
////
////            }));
////        }
////
////    }
//    //每周战场定榜
//    @Scheduled(cron = "0 0 4 ? * 1")
//    @RequestMapping("/battleField")
//    public void battleFieldTask(){
//        String phase = xiuxianBattleFieldMapper.getPhase();
//        xiuxianBattleFieldMapper.updatePhase(Integer.parseInt(phase)+1);
//
//        for (int i = 1;i <= 7;i++){
//            List<XiuxianBattleField> xiuxianBattleFields = xiuxianBattleFieldMapper.list(phase,i);
//            int t = xiuxianBattleFields.size() / 4;
//            List<XiuxianBattleField> first = new ArrayList<>();
//            List<XiuxianBattleField> second = new ArrayList<>();
//            List<XiuxianBattleField> third = new ArrayList<>();
//            xiuxianBattleFields.forEach(getIndex((e, index) -> {
//                if(t == 0){
//                    //不足四个人，第一升级其他人保级
//                    if(index == 0){
//                        first.add(e);
//                    }else {
//                        second.add(e);
//                    }
//                }else {
//                    //四人及以上，前i个升级，后i个降级，中间保级
//                    if(index < t){
//                        first.add(e);
//                    }else if(index >= xiuxianBattleFields.size() - t){
//                        third.add(e);
//                    }else {
//                        second.add(e);
//                    }
//                }
//            }));
//            if(i == 1){
//                second.addAll(third);
//                third.clear();
//            }
//            if(i == 7){
//                second.addAll(first);
//                first.clear();
//            }
//
//            battleFieldAdd(first,i,1);
//            battleFieldAdd(second,i,0);
//            battleFieldAdd(third,i,-1);
//
//        }
//
//    }
//
//    @RequestMapping("/query")
//    public void query(){
//
//        for (int i = 1;i <= 7;i++){
//            List<XiuxianBattleField> xiuxianBattleFields = xiuxianBattleFieldMapper.list("1",i);
//            int t = xiuxianBattleFields.size() / 4;
//            List<XiuxianBattleField> first = new ArrayList<>();
//            List<XiuxianBattleField> second = new ArrayList<>();
//            List<XiuxianBattleField> third = new ArrayList<>();
//            xiuxianBattleFields.forEach(getIndex((e, index) -> {
//                if(t == 0){
//                    //不足四个人，第一升级其他人保级
//                    if(index == 0){
//                        first.add(e);
//                    }else {
//                        second.add(e);
//                    }
//                }else {
//                    //四人及以上，前i个升级，后i个降级，中间保级
//                    if(index < t){
//                        first.add(e);
//                    }else if(index >= xiuxianBattleFields.size() - t){
//                        third.add(e);
//                    }else {
//                        second.add(e);
//                    }
//                }
//            }));
//            if(i == 1){
//                second.addAll(third);
//                third.clear();
//            }
//            if(i == 7){
//                second.addAll(first);
//                first.clear();
//            }
//            battleFieldAdd(first,i,1);
//            battleFieldAdd(second,i,0);
//            battleFieldAdd(third,i,-1);
//
//
//        }
//
//    }
//
//
//
//    private void battleFieldAdd(List<XiuxianBattleField> first, int i,int a) {
//        Integer addNum = 200 + i * 100 + 50 * a;
//        first.forEach(e -> {
//            logger.info("当前执行人：{},增加战场币:{}",e.getAccountId(),addNum);
//            xiuxianExtendMapper.addBattleGold(e.getAccountId(),addNum,a);
//        });
//    }
//
//    //每月深渊更新
//    @Scheduled(cron = "0 0 0 15,30 * ?")
//    public void abyssRefresh(){
//        logger.info("深渊刷新开始");
//        extendHelper.refreshAbyss();
//    }
//
//    @Scheduled(cron = "0 0 0/2 * * ?")
//    public void refundRedPacket(){
//        logger.info("红包退还检索");
//        //要退还的红包
//        List<XiuxianRedPacket> list = xiuxianRedPacketMapper.getRefund();
//        list.forEach(e -> {
//            //未被领取的红包列表
//            LambdaQueryWrapper<XiuxianRedPacket> aNull = new LambdaQueryWrapper<XiuxianRedPacket>()
//                    .eq(XiuxianRedPacket::getPacketId, e.getPacketId())
//                    .eq(XiuxianRedPacket::getType, 0)
//                    .isNull(XiuxianRedPacket::getUserId);
//            List<XiuxianRedPacket> packetList = xiuxianRedPacketMapper.selectList(aNull);
//
//            XiuxianRedPacket xiuxianRedPacket = new XiuxianRedPacket();
//            xiuxianRedPacket.setUserId("refund");
//            xiuxianRedPacket.setCreateTime(new Date());
//
//            xiuxianRedPacketMapper.update(xiuxianRedPacket,aNull);
//            //要退还的金额
//            Integer sum = packetList.stream().mapToInt(XiuxianRedPacket::getGold).sum();
//            //发红包的人
//            String userId = e.getUserId();
//            //邮件退钱
//            UserBO byUserId = userHelper.getByUserId(userId);
//            XiuxianUserEmail email = new XiuxianUserEmail(byUserId.getId());
//            JSONObject jsonObject = new JSONObject();
//            jsonObject.put("type",0);
//            jsonObject.put("name","摩拉");
//            jsonObject.put("num", sum);
//            jsonObject.put("quality",2);
//            email.setExtra(jsonObject.toString());
//            email.setTitle("红包未领取退还");
//            SimpleDateFormat ft = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//            String format = ft.format(e.getCreateTime());
//            email.setMsg("您在"+format+"发出的红包未被领取完毕，剩余摩拉"+sum);
//            emailHelper.insert(email);
//        });
//    }
//
//    @Scheduled(cron = "0 0 0/2 * * ?")
//    public void refreshExploreResource(){
//        exploreUserMapper.refreshExploreResource();
//    }
//
//
//}
